//
// Created by ta&to on 2022/8/16.
//
#ifndef __LOC_STRING_H
#define __LOC_STRING_H
#include <string.h>
#include <stdint.h>
#include <limits.h>
#include <errno.h>
#include <stdlib.h>
#include <ctype.h>
#include <regex.h>
#include "unix/http_alloc.h"

#define LONG_STR_SIZE      21

#define LF          (u_char) '\n'
#define CR          (u_char) '\r'
#define CRLF        "\r\n"
#define HEAD_TAIL    "\r\n\r\n"
void strcpyfromlen(char *desc, char *src, size_t srcfrom, size_t descto, size_t len); // 复杂字符串
char *substring(char* desc, char *src, int len, int start);     //截取字符串
int lastindexof(char *src, char *target);                       // 查找最后一个字符串
int indexof(char *src, char *target);                           // 查找字符
int indexnof(char *src, int srclen, char *target, int targetlen); // 查找字符串
char * stracat(char* src, char* desc, int size);                // 数据追加
char * trim(char *src);                                         // 去掉前后空格
char **strancat(char **desc, char *src, int size);              // 可自动扩展内存的追加字符串
int isEmpty(char *str);

uint32_t digits10(int64_t v);
int ull2string(char *dst, size_t dstlen, unsigned long long value);
int ll2string(char *dst, size_t dstlen, long long svalue);
int string2ll(const char *s, size_t slen, long long *value);
unsigned long long memtoull(const char *p, int *err);
const char *mempbrk(const char *s, size_t len, const char *chars, size_t charslen);
char *memmapchars(char *s, size_t len, const char *from, const char *to, size_t setlen);
int string2l(const char *s, size_t slen, long *lval);
int hex2dec(char c);
int htoi(char *hex);
int regex(char *src, char *pattern, regmatch_t nmatch[], size_t size);
int memcasecmp(const void *str1, const void *str2, size_t n);
#endif
